package com.bjpowernode.converter;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.bjpowernode.constant.DicEnum;
import com.bjpowernode.entity.TProduct;

import java.util.List;

import static com.bjpowernode.DlykServerApplication.cacheMap;

/**
 * Excel意向产品转换器
 * 实现EasyExcel的Converter接口，用于将Excel中读取的意向产品文本名称转换为系统内部对应的产品ID
 */
public class IntentionProductConverter implements Converter<Integer> {
    /**
     * 将Excel单元格中的意向产品文本名称转换为系统产品ID
     * 从缓存中获取产品列表，通过文本名称匹配查找对应的ID；未找到匹配项时返回列表中第一个产品的ID
     *
     * @param cellData            Excel单元格数据对象，包含读取到的意向产品文本名称
     * @param contentProperty     Excel内容属性配置（当前字段的Excel相关配置信息）
     * @param globalConfiguration EasyExcel全局配置对象
     * @return 匹配的产品ID；若未找到匹配项，返回产品列表中第一个产品的ID
     * @throws  转换过程中可能抛出的异常（如缓存数据获取失败等）
     */
    @Override
    public Integer convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        // 获取Excel单元格中的意向产品文本名称（如"个人信用贷款"、"房贷"等）
        String stringValue = cellData.getStringValue();

        // 从全局缓存中获取意向产品列表（缓存key为意向产品字典编码，对应DataTask定时加载的产品数据）
        List<TProduct> products = (List<TProduct>) cacheMap.get(DicEnum.INTENTION_PRODUCT.getCode());

        // 遍历产品列表，通过名称匹配查找对应的产品ID
        for (TProduct product : products) {
            Integer id = product.getId();          // 产品ID（系统内部存储值）
            String name = product.getName();       // 产品名称（Excel中显示的文本值）
            if (name.equals(stringValue)) {        // 名称匹配时返回对应ID
                return id;
            }
        }

        // 若未找到匹配的产品名称，默认返回列表中第一个产品的ID作为 fallback
        return products.get(0).getId();
    }
}
